// 定义自定义指令
const numberInput = {
  bind: function (el, binding) {
    const input = el.tagName === "INPUT" ? el : el.querySelector("input");
    if (input) {
      input.addEventListener("input", function () {
        let value = this.value;
        const floatLength = binding.value;

        if (floatLength === undefined) {
          // 未传入小数位数，只允许输入数字
          value = value.replace(/[^\d]/g, "");
        } else {
          // 先移除除数字、小数点和负号（考虑负数情况）之外的字符
          value = value.replace(/[^\d.-]/g, "");

          // 处理负号，确保负号只能在开头且最多一个
          const minusCount = (value.match(/-/g) || []).length;
          if (
            minusCount > 1 ||
            (minusCount === 1 && value.indexOf("-") !== 0)
          ) {
            value = value.replace(/-/g, "");
          }

          // 处理小数点
          const dotIndex = value.indexOf(".");
          if (dotIndex !== -1) {
            const integerPart = value.slice(0, dotIndex);
            let decimalPart = value.slice(dotIndex + 1);

            // 如果传入了 float 参数，限制小数位数
            if (floatLength) {
              decimalPart = decimalPart.slice(0, floatLength);
            }

            value = integerPart + (decimalPart ? `.${decimalPart}` : ".");
          }

          // 避免出现多个小数点
          if ((value.match(/\./g) || []).length > 1) {
            const firstDotIndex = value.indexOf(".");
            value =
              value.slice(0, firstDotIndex + 1) +
              value.slice(firstDotIndex + 1).replace(/\./g, "");
          }

          // 避免以小数点开头（如果不是负数的情况）
          if (value.startsWith(".") && !value.startsWith("-.")) {
            value = "0" + value;
          }
        }

        this.value = value;
      });
    }
  },
};

export default numberInput;
